package com.shujia.day15.ketang;

/*
    递归：方法定义时内部调用自身的现象

    fun1().fun2() 这叫方法的链式调用
    fun1(show1()) 这叫方法的嵌套调用

    写递归需要考虑的东西：
        1、开始条件
        2、出口

    递归：
        1、从前有座山，山里有座庙，庙里有个老和尚，老和尚在给小和尚讲故事，讲的故事内容：  1
            从前有座山，山里有座庙，庙里有个老和尚，老和尚在给小和尚讲故事，讲的故事内容：    2
                从前有座山，山里有座庙，庙里有个老和尚，老和尚在给小和尚讲故事，讲的故事内容：   3
                    从前有座山，山里有座庙，庙里有个老和尚，老和尚在给小和尚讲故事，讲的故事内容： 4
                    ....
           结束条件：山倒了，老和尚圆寂了。

        2、来数加学习大数据，找工作，挣钱，娶老婆，生娃：
            来数加学习大数据，找工作，挣钱，娶老婆，生娃：
                来数加学习大数据，找工作，挣钱，娶老婆，生娃：
                ...
           结束条件：挣不到钱，没有生娃...

     需求：使用递归实现一个数的阶乘
 */
public class DiGuiDemo1 {
    public static void main(String[] args) {
        int res = jieCheng(5);
        System.out.println("5的阶乘是：" + res);
    }

    // 5*4*3*2*1
    public static int jieCheng(int i) {
        if (i == 1) {
            return 1;
        } else {
            return i * jieCheng(--i);
            // 5 * jieCheng(4)
            // 5 * 4 * jieCheng(3)
            // 5 * 4 * 3 * jieCheng(2)
            // 5 * 4 * 3 * 2 * jieCheng(1)
        }
    }

//    public static void fun1(){
//        fun1();
//    }
}
